package com.myrice.jms;

import java.nio.ByteBuffer;

import com.myrice.core.Session;

public interface MsgSession extends Session {
	/**
	 * Session自定义接收超时时间毫秒(Long)属性，-1表示永久。
	 */
	String SESSION_RECV_TIMEOUT = "__SESSION_RECV_TIMEOUT__";

	/**
	 * Session自定义保持在线超时时间毫秒(Long)属性，-1表示永久。
	 */
	String SESSION_KEPLIVE_TIMEOUT = "__SESSION_KEPLIVE_TIMEOUT__";

	/**
	 * 发送异步消息
	 * 
	 * @param msg
	 * @return
	 */
	boolean send(ByteBuffer msg);

	/**
	 * 发送异步阻塞消息
	 * 
	 * @param msg
	 *            请求消息
	 * @param response
	 *            消息响应
	 */
	boolean send(ByteBuffer msg, MsgResponseCall response);

	/**
	 * 发送阻塞消息,使用默认超时
	 * 
	 * @param msg
	 *            请求消息
	 * @param response
	 *            消息响应
	 * @param sync
	 *            是否同步
	 */
	boolean send(ByteBuffer msg, MsgResponseCall response, boolean sync);

	/**
	 * 发送阻塞消息
	 * 
	 * @param msg
	 *            请求消息
	 * @param response
	 *            消息响应
	 * @param sync
	 *            是否同步
	 * @param timout
	 *            超时毫秒， -1表示无限等待
	 */
	boolean send(ByteBuffer msg, MsgResponseCall response, boolean sync,
			long timout);

	/** 更新最后活动事件 */
	void updateLastTime();

	/** 创建自定义Session */
	MsgSession createSession(String sessionId);

	/** 创建服务器同步Session */
	MsgSession getSession(Integer sid);

	/** 创建服务器同步Session */
	MsgSession createSession(Integer sid);

	MsgSession getParent();

	/** 生成会话 */
	void buildSession(int sid);

	/** 删除会话 */
	void closeSession(int sid);

	/** 是否存在Session */
	boolean hasSessionId(Integer sid);

	/** 获取或创建会话 */
	MsgSession getOrCreateSession(Integer sid);

	/** 获取非默认Session的Sid，0为默认Session */
	int getSid();

	String getSessionId(Integer sid);
}
